Universidade Federal da Paraíba
Urbanização no Brasil: de 31% em 1940 para 85,1% em 2014
Êxodo rural, industrialização e crescimento desordenado das metrópoles
Criação do Sistema Financeiro da Habitação (SFH) – Lei nº 4.380/1964
A partir de 1980, o SFH passou a ser impactado pelo aumento da inflação e pelas medidas adotadas pelos governos para contê-la
Em 1985, as prestações foram reajustadas em 112%, enquanto os saldos devedores subiram 246% com a inflação acumulada
O Plano Cruzado (1986) converteu o valor das prestações com base na média dos 12 meses anteriores e congelou os reajustes pelos 12 meses seguintes
Em 1987 e 1989, as prestações foram congeladas temporariamente pelo Plano Bresser e pelo Plano Verão, respectivamente
O Plano Collor I (1990), foi o que mais prejudicou o SFH
A crise econômica entre as décadas de 1980 e 1990 elevou a inadimplência no SFH de 9% em 1994 para 30% em 2005.
As árvores de decisão podem ser utilizadas tanto para regressão quanto para classificação
Uma das grandes vantagens é a interpretabilidade do modelo, em que é possível visualizar claramente as regras de decisão geradas
O processo de construção das árvores se baseia no particionamento recursivo do espaço dos preditores.
Cada particionamento é chamado de nó e o resultado final é chamado de folha ou nó terminal.
O espaço dos preditores é dividido em \(J\) regiões distintas e disjuntas denotadas por \(R_{1}, R_{2}, \cdots, R_{J}\).
\[ f\left(x\right) = \sum^{J}_{j=1}c_jI\left(x \in R_j \right), \]
\[ I_{R_j}(x) = \begin{cases} 1,& \text{se } x \in R_j \\ 0,& \text{se } x \notin R_j \end{cases}\text{.} \]
O estimador para a constante \(c_j\) é encontrado pelo método de mínimos quadrados:
\[ \sum_{x_i \in R_{j}} \left[y_i - f\left(x_i\right)\right]^2 \text{.} \qquad(1)\]
Como \(f\left(x_i\right)\) está sendo avaliado em um ponto específico \(x_i\) e as regiões são disjuntas, tem-se que \(f\left(x_i\right) = c_j\). Dessa forma, a Equação 1 se reduz a:
\[ \sum_{x_i \in R_j}\left[y_i - c_j\right]^2 \]
Derivando em relação a \(c_j\) e igualando a zero:
\[ \frac{\partial}{\partial c_j} \sum_{x_i \in R_j}\left(y_i - c_j\right)^2 = -2 \sum_{x_i \in R_j}\left(y_i - c_j\right) = 0 \]
Assim, chega-se ao estimador para \(c_j\):
\[ \hat{c}_j = \frac{1}{N_j}\sum_{x_i \in R_j} y_i \]
Ou seja, a predição será a média das observações da resposta que estão contidas em \(R_j\).
Considerar todas as possíveis partições do espaço dos preditores é inviável devido ao alto custo computacional.
Dessa forma, utiliza-se a abordagem de divisão binária recursiva.
O processo inicia com a escolha de uma variável independente \(X_j\) e um ponto de corte \(s\) que proporcione a maior redução possível na soma dos quadrados dos resíduos. Isso define dois subconjuntos:
\[ R_{1}\left(j, s\right) = \{X|X_j \leq s\} \text{ e } R_{2}\left(j, s\right) = \{X|X_j > s\} \text{, } \]
\[ \min_{j, s}\left[\min_{c_1} \sum_{x_i \in R_1\left(j, s\right)} \left(y_i - c_{1}\right)^2 + \min_{c_2} \sum_{x_i \in R_2\left(j, s\right)} \left(y_i - c_{2}\right)^2\right]\text{,} \] em que \(c_1\) e \(c_2\) são as médias das respostas nas regiões \(R_1(j, s)\) e \(R_2(j, s)\), respectivamente.
O tamanho da árvore atua como um controle da complexidade do modelo:
Para lidar com isso, adota-se a estratégia de crescer inicialmente uma árvore grande \(T_0\), interrompendo as divisões apenas quando um número mínimo de observações por nó for alcançado.
Em seguida, realiza-se a poda da árvore com base no critério de custo-complexidade.
Para o processo de poda, define-se uma árvore qualquer \(T \subset T_{0}\) obtida a partir da poda de \(T_{0}\), isto é, colapsando o seus nós internos. Assim, define-se o critério de custo-complexidade:
\[ C_{\alpha}\left(T\right) = \sum^{|T|}_{j=1}N_jQ_j\left(T\right) + \alpha|T| \] em que \(|T|\) é o número de folhas da árvore, \(Q\left(T\right)\) é a impureza do nó terminal \(j\), \(\alpha\) é o parâmetro que equilibra o tamanho da árvore e a adequação aos dados.
A busca pela subárvore \(T_{\alpha}\) é feita por meio do colapso sucessivo dos nós internos que causam o menor aumento em \(\sum_{j} N_j Q_j\left(T\right)\), até restar uma árvore com um único nó.
Esse processo gera uma sequência de subárvores, dentre as quais existe, para cada valor de \(\alpha\), uma única subárvore que minimiza \(C_{\alpha}\left(T\right)\).
A estimação de \(\alpha\) pode ser feita por validação cruzada, resultando na árvore final \(T_{\hat{\alpha}}\).
No caso da regressão, \(Q_j\left(T\right)\) pode representar o erro quadrático médio; já na classificação, utilizam-se métricas como o índice de Gini ou a entropia cruzada.
Para classificação, a predição no nó terminal \(j\) corresponde à classe majoritária, cuja proporção é dada por:
\[ \hat p_{jk} = \frac{1}{N_j} \sum_{x_i \in R_j}I\left(y_i = k\right)\text{, } \]
\[ k\left(j\right) = \arg \max_{k} \hat{p}_{jk} \]
O algoritmo Bagging (Bootstrap Aggregating) foi introduzido por Breiman (1996).
Sua ideia central é gerar um estimador agregado a partir de múltiplas versões de um preditor, treinadas com amostras bootstrap do conjunto de treinamento.
O principal objetivo do Bagging é reduzir a variância de modelos, como as árvores de decisão, que tendem a variar muito quando treinadas isoladamente.
Ao combinar diversas árvores treinadas em subconjuntos distintos, o Bagging melhora a estabilidade e o desempenho preditivo do modelo final.
No caso de regressão, a predição do Bagging é obtida pela média das predições individuais de cada árvore.
Formalmente, seja \(\mathcal{L}\) o conjunto de treinamento. A partir dele, geram-se \(B\) amostras bootstrap \(\mathcal{L}^{(b)}\), cada uma usada para treinar uma árvore de regressão \(f(x, \mathcal{L}^{(b)})\).
A predição final agregada é dada por:
\[ f_{B}\left(x\right) = \frac{1}{B} \sum_{b = 1}^B f \left(x, \mathcal{L}^{\left(B\right)}\right)\text{,} \]
onde \(f_B(x)\) representa a predição média das \(B\) árvores.
Embora o Bagging reduza a variância e melhore o desempenho preditivo de árvores de regressão, isso ocorre à custa de menor interpretabilidade.
Uma alternativa é estimar a importância dos preditores com base na redução média do erro (ex.: erro quadrático médio) provocada por cada variável ao longo das \(B\) árvores. Um valor elevado na redução total média do erro quadrático médio, calculado com base nas divisões realizadas por um determinado preditor em todas as 𝐵 árvores, indica que o preditor é importante.
No entanto, as árvores geradas pelo Bagging tendem a ser muito semelhantes, o que limita seus ganhos:
Essa correlação ocorre porque as mesmas variáveis tendem a ser escolhidas repetidamente nas divisões, por causarem maior redução no erro.
No Boosting, não é necessário utilizar amostras bootstrap.
Assim como outros métodos ensemble, o Boosting pode ser aplicado a diferentes modelos, mas é mais conhecido pelo uso com árvores de regressão.
Diferente do Bagging, que constrói as árvores de forma paralela, o Boosting as constrói sequencialmente.
O objetivo é incorporar informações e corrigir os erros cometidos pelas árvores anteriores.
O processo começa ajustando uma árvore aos valores observados da variável dependente; em seguida:
Como cada árvore depende das anteriores, árvores menores são suficientes (James et al. 2013).
O aprendizado no Boosting é mais lento, mas tende a gerar modelos mais precisos.
O processo é controlado por um hiperparâmetro \(\lambda\), chamado taxa de aprendizado.
A profundidade das árvores, controlada pelo número de divisões \(d\), também pode ser considerado um hiperparâmetro para ajuste:
O Stacked Generalization (Stacking) é um método ensemble que combina as predições de vários modelos para treinar um novo estimador, com o objetivo de melhorar a precisão das predições.
A ideia central é atribuir pesos às predições dos modelos, dando mais importância àqueles com melhor desempenho, enquanto se evita atribuir altos pesos a modelos excessivamente complexos.
Matematicamente, o Stacking ajusta o modelo \(m = 1, \cdots, M\) ao conjunto de treinamento com a \(i\)-ésima observação removida, definindo predições \(\hat f_{m}^{-i}\left(x\right)\).
Os pesos são estimados por mínimos quadrados, resolvendo:
\[ \hat{w}^{st} = \arg \min_{w} \sum^{N}_{i = 1} \left[y_i - \sum^{M}_{m = 1} w_m \hat{f}^{-i}_m\left(x_i\right)\right]^2\text{.} \]
\[ \sum_{m}\hat{w}^{\text{st}}_{m}\hat{f}_{m}\left(x\right) \]
A obtenção de dados para o mercado imobiliário representa um desafio, devido à escassez de bases públicas organizadas.
Como alternativa, optou-se pela extração direta de informações de sites especializados utilizando a técnica conhecida como web scraping, com a coleta realizada em dois momentos distintos.
Em particular, as informações foram coletadas do Zap Imóveis.
O Zap Imóveis é uma das principais plataformas online de compra, venda e aluguel de imóveis no Brasil. Fundado em março de 2000, inicialmente recebeu o nome de Planeta Imóvel.
Possui uma base extensa de anúncios em diferentes cidades, incluindo João Pessoa, abrangendo imóveis novos e usados, residenciais e comerciais.
Sua ampla cobertura e variedade de informações o tornam uma fonte relevante para estudos de mercado e análise imobiliária.
Entre as informações disponíveis para coleta, destacam-se o preço do imóvel, a área, o número de quartos, o número de vagas de garagem, o endereço, o tipo de imóvel, o valor do condomínio e características adicionais, como piscina, academia, spa, entre outras.
O web scraping é uma técnica utilizada para extrair informações de sites da internet, armazenando-as em arquivos ou sistemas de banco de dados para fins de análise, desenvolvimento de aplicações ou acesso a informações de difícil obtenção.
A coleta dos dados é realizada por meio do Hypertext Transfer Protocol (HTTP),
Os métodos mais utilizados em web scraping são o GET e o POST:
O processo de web scraping normalmente se inicia com uma requisição GET para obter o conteúdo de uma página web.
rvest
xml2
httr
Scrapy
Playwright
O Filipeia - Mapas da Cidade é uma plataforma online que disponibiliza dados geográficos e cartográficos sobre a cidade de João Pessoa.
Criado com o objetivo de apoiar pesquisadores, profissionais e a população em geral, o site reúne mapas atualizados dos bairros, ruas, equipamentos públicos e outras divisões territoriais do município.
Entre os dados disponíveis na plataforma e que foram utilizados no projeto, destacam-se: ciclovias, faixas exclusivas de ônibus, corredores de transporte público, áreas rurais, limites de bairros, além da localização de parques, praças e rios.
As informações sobre escolas públicas foram obtidas junto ao Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira (INEP).
A partir dos dados do INEP, foi possível incorporar à aplicação a localização das escolas públicas de João Pessoa, enriquecendo a análise espacial e oferecendo mais uma camada de informação relevante para o projeto.
Método de imputação de valores ausentes:
Para avaliar o desempenho dos modelos, foram utilizadas três métricas principais:
\[ \text{RMSE} = \sqrt{\dfrac{1}{n} \sum_{i = 0}^n (y_i - \hat y_i)^2} \]
\[ R^2 = 1 - \dfrac{SS_{\text{resíduos}}}{SS_{\text{total}}} \]
\[ \text{MAPE} = \frac{1}{n} \sum_{i=0}^n \left|1 - \frac{y_i}{\hat y_i}\right|\text{,} \]
Para estimar o erro dos modelos e auxiliar na otimização do número de vizinhos mais próximos, bem como dos demais hiperparâmetros, foi utilizada a técnica de validação cruzada K-Fold.
O K-Fold busca estimar o erro de generalização, definido como \(Err = E\left[L\left(Y, \hat{f}\left(X\right)\right)\right]\), por meio do seguinte processo:
A otimização dos hiperparâmetros foi realizada por meio da otimização bayesiana.
Nesse método, as próximas tentativas são ajustadas com base nos resultados anteriores, utilizando uma função probabilística \(P\left(c \mid \lambda\right)\), que modela a relação entre os hiperparâmetros \(\lambda\) e o desempenho \(c\).
A escolha dos próximos pontos é feita por uma função de aquisição, que equilibra a exploração de regiões ainda não exploradas e próximas aos melhores resultados obtidos.
Neste trabalho, utilizou-se o modelo Tree-Structured Parzen Estimator (TPE) para a função probabilística:
\[ EI_{y^*}\left(\lambda\right) = \int_{-\infty}^{\infty} \max\left(y^* - y, 0\right)p_{M}\left(y|\lambda\right)dy\text{.} \]
\[ EI_{y^*}\left(\lambda\right) = \frac{\gamma y^* l\left(\lambda\right) - l\left(\lambda\right) \int_{-\infty}^{y^*} yp\left(y\right)dy}{\gamma l\left(\lambda\right) + \left(1 - \gamma\right)g\left(\lambda\right)} \propto \left[\gamma + \frac{g\left(\lambda\right)}{l\left(\lambda\right)} \left(1 - \gamma\right)\right]^{-1}\text{.} \]
O ICE (Individual Conditional Expectation) é um método que permite analisar o efeito isolado de uma covariável sobre a predição, mantendo as demais variáveis constantes.
No ICE, é considerado um grid \({x_{S_i}, x_{C_i}}_{i=1}^{N}\) de valores no domínio da variável de interesse \(x_S\), enquanto as demais covariáveis \(x_C\) permanecem fixas.
A partir das predições \(\hat{f}\) geradas ao longo dessa variação, constrói-se um gráfico que apresenta:
Para facilitar a interpretação, os valores foram centralizados utilizando o valor mínimo \(x^{*}\) de \(x_S\), feito da seguinte forma:
\[ \hat{f}_{cent}^{\left(i\right)} = \hat{f}^{\left(i\right)} - \mathbf{1} \hat{f}\left(x^*, \mathbf x_{C_i}\right)\text{,} \] em que \(x^*\) é selecionado como o mínimo ou o máximo de \(x_S\), \(\hat f\) é o modelo ajustado, e \(\mathbf 1\) é um vetor de uns.
O SHAP (Shapley Additive Explanations) é um método que busca explicar as predições individuais de um modelo, atribuindo a cada variável uma contribuição para o valor predito
Baseia-se nos valores de Shapley da teoria dos jogos de coalizão, introduzidos por Shapley (1953), que representam a contribuição média de cada variável considerando as possíveis combinações (coalizões) de variáveis.
Fórmula dos Valores de Shapley:
Modelo Aditivo:
Departamento de Estatística - UFPB